<html>
<head></head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>
<center>
    <h2>24点计算器</h2>
    <script language="javaScript">
    function clean() {
        breast.reset();
    }

    function getRandomNum() {
        var result = Math.floor(Math.random() * 11);
        if (result == 0) {
            result = 1;
        }
        return result;
    }

    function randomNum() {
        document.getElementById("a1").value=getRandomNum();
        document.getElementById("a2").value=getRandomNum();
        document.getElementById("a4").value=getRandomNum();
        document.getElementById("a8").value=getRandomNum();
    }

    function tdisoper(f0,f1,f2,f3){
        this[0]=f0;
        this[1]=f1;
        this[2]=f2;
        this[3]=f3;
    }
    disoper=new tdisoper("-","+","/","*");
    function oper(f,m,n)
    {
        if (f==3) return(m*n);
        if (f==2) return(m/n);
        if (f==1) return(parseFloat(m)+parseFloat(n));
        if (f==0) return(m-n);
    }
    function tb(i1,i2,i4,i8)
    {
        this[1]=i1;
        this[2]=i2;
        this[4]=i4;
        this[8]=i8;
    }
    function valid(F)
    {

        b=new tb(F.a1.value,F.a2.value,F.a4.value,F.a8.value);
        if (b[1]==""){
            alert("You must enter an integer！");    F.a1.focus();    return(false);
        }
        if (b[2]==""){
            alert("You must enter an integer！");    F.a2.focus();    return(false);
        }
        if (b[4]==""){
            alert("You must enter an integer！");    F.a4.focus();    return(false);
        }
        if (b[8]==""){
            alert("You must enter an integer！");    F.a8.focus();    return(false);
        }
        k=0;
        var result="";
        F.text.value="";
        for (i1=1;i1<=8;i1*=2)
            for (i2=1;i2<=8;i2*=2)
                for (i3=1;i3<=8;i3*=2)
                    for (i4=1;i4<=8;i4*=2)
                    {
                        if ((i1|i2|i3|i4)!=0xf) continue;
                        for (f1=0;f1<=3;f1++)
                            for (f2=0;f2<=3;f2++)
                                for (f3=0;f3<=3;f3++)
                                    {
                                    m=oper(f3,oper(f2,oper(f1,b[i1],b[i2]) ,b[i3] ) ,b[i4]);
                                    if (Math.abs(m-24)<1e-5) {
                                        key = "(("+b[i1]+disoper[f1]+b[i2]+")"+disoper[f2]+b[i3]+")"+disoper[f3]+b[i4]+"\n";
                                        if (result.indexOf(key) == -1) {
                                            result=result+key;
                                            ++k;
                                        }
                                    }
                                    m=oper(f1, b[i1], oper(f3, oper(f2,b[i2],b[i3]) ,b[i4]) );
                                    if (Math.abs(m-24)<1e-5){
                                        key = b[i1]+disoper[f1]+"(("+b[i2]+disoper[f2]+b[i3]+")"+disoper[f3]+b[i4]+")\n";
                                        if (result.indexOf(key) == -1) {
                                            result=result+key;
                                            ++k;
                                        }
                                    }
                                    m=oper(f3,oper(f1,b[i1], oper(f2,b[i2],b[i3]) ),b[i4]);
                                    if (Math.abs(m-24)<1e-5){
                                        key = "("+b[i1]+disoper[f1]+"("+b[i2]+disoper[f2]+b[i3]+"))"+disoper[f3]+b[i4]+"\n";
                                        if (result.indexOf(key) == -1) {
                                            result=result+key;
                                            ++k;
                                        }
                                    }
                                    m=oper(f1, b[i1], oper(f2, b[i2], oper(f3, b[i3], b[i4]) ) );
                                    if (Math.abs(m-24)<1e-5){
                                        key =b[i1]+disoper[f1]+"("+b[i2]+disoper[f2]+"("+b[i3]+disoper[f3]+b[i4]+"))\n";
                                        if (result.indexOf(key) == -1) {
                                            result=result+key;
                                            ++k;
                                        }
                                    }
                                    m=oper(f2,oper(f1,b[i1],b[i2]), oper(f3,b[i3],b[i4]) );
                                    if (Math.abs(m-24)<1e-5){
                                        key = "("+b[i1]+disoper[f1]+b[i2]+")"+disoper[f2]+"("+b[i3]+disoper[f3]+b[i4]+")\n";
                                        if (result.indexOf(key) == -1) {
                                            result=result+key;
                                            ++k;
                                        }
                                    }

                                }
                    }
        F.text.value=result+"----一共找到 "+k+" 种!----\n"
        return(false);
    }
    </script>
    <form id="breast" onsubmit="return valid(this)">
        <b>请输入四个整数</b>：<br>
        <input type="number" maxlength="6" id="a1" size="5" style="width: 100px; height: 30px;">
        <input type="number" maxlength="6" id="a2" size="5" style="width: 100px; height: 30px;"> <br>
        <input type="number" maxlength="6" id="a4" size="5" style="width: 100px; height: 30px;">
        <input type="number" maxlength="6" id="a8" size="5" style="width: 100px; height: 30px;"> <br>
        <br>
        <input type="button" onclick="randomNum();" value="随机生成四个数" style="width: 150px; height: 30px;">  <br><br>
        <input name="submit" type="submit" value="计算" class="calc" style="width: 50px; height: 30px;">&nbsp;&nbsp;&nbsp;&nbsp;<input name="提交" type="reset" onclick="clean();" value="清除" class="calc" style="width: 50px; height: 30px;"><br>
        <b>结果：</b><p style="font-size: 5;">(结果中可能存在重复的计算方式)</p><br>
        <textarea name="text" style="width: 300px; height: 300px;"></textarea>
    </form>
    <div class="intro_area">
        <p>24点是一种益智游戏，24点是把4个整数（一般是正整数）通过加减乘除以及括号运算，使最后的计算结果是24的一个数学游戏，24点可以考验人的智力和数学敏感性，它能在游戏中提高人们的心算能力。</p>
        <p>24点通常是使用扑克牌来进行游戏的，一副牌中抽去大小王后还剩下52张（如果初练也可只用1～10这40张牌），任意抽取4张牌（称为牌组），用加、减、乘、除（可加括号）把牌面上的数算成24。每张牌必须只能用一次，如抽出的牌是3、8、8、9，那么算式为（9－8）×8×3或3×8÷（9－8）或（9－8÷8）×3等。</p>
        <p>游戏技巧</p>
        <p>“算24点”作为一种扑克牌智力游戏，应注意计算中的技巧问题。比如，计算时，不能够把牌面上的4个数的不同组合形式——去试，更不能瞎碰乱凑。这里向大家介绍几种常用的、便于学习掌握的方法：</p>
        <p>1．利用3×8=24、4×6=24 、12×2=24求解。</p>
        <p>把牌面上的四个数想办法凑成3和8、4和6、12和2再相乘求解。如3、3、6、10可组成（10-6÷3）×3=24或（10-3-3）×6=24。又如2、3、3、7可组成（7+3-2）×3=24等。实践证明，这种方法是利用率最大、命中率最高的一种方法。</p>
        <p>2．利用0、1的运算特性求解。</p>
        <p>如3、4、4、8可组成3×8+4—4=24等。又如4、5、J、K可组成11×（5—4）+13=24等。</p>
    </div>
</center>
</body>
<html>